/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package verins.DAO;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.swing.JOptionPane;
import verins.BO.LogBO;
import verins.beans.Log;
import verins.beans.Procesoelectoral;
import verins.beans.Usuario;
/**
 *
 * @author jpenam
 */
public class ProcesoElectoralDAO {
    public boolean save(Procesoelectoral proceso,int usuario){
      try{
        Log entrada=null;
        // Create the EntityManager
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("verinsPU");
        EntityManager em = emf.createEntityManager();
       
        em.getTransaction().begin();
        if(proceso.getIdprocesoelectoral() == 0){
            em.persist(proceso);
            entrada=LogBO.crearEntradaLogSeguimiento(proceso.getIdprocesoelectoral(),usuario, verins.Utils.Constantes.LSEG_REGISTRO, "Se registró el proceso electoral: "+proceso.getNombre());
        }
        else{
            em.merge(proceso);
            entrada=LogBO.crearEntradaLogSeguimiento(proceso.getIdprocesoelectoral(), 0, verins.Utils.Constantes.LSEG_MODIFICACION, "Se modificó el proceso electoral: "+proceso.getNombre());
        }
        
        em.getTransaction().commit();
        em.close();
        emf.close();
        
        LogBO.registrarLog(entrada);
         
        return true;
        
      }catch(Exception ex){
          JOptionPane.showMessageDialog(null, "Error al grabar datos"+ex.getMessage());
          return false;
      } 
      
      
}
    public List finAll(){
        List lista=null;
        try{
            
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("verinsPU");
            EntityManager em = emf.createEntityManager();
            Query query=em.createNamedQuery("Procesoelectoral.findAll");
            
            lista=query.getResultList();
            
            em.getTransaction().commit();
            em.close();    
            emf.close();
            
            return lista;
            
        }catch(Exception ex){

        }
        return lista;
    }
    public Procesoelectoral finById(int id){
        Procesoelectoral proceso=null;
        try{
            
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("verinsPU");
            EntityManager em = emf.createEntityManager();
            proceso = em.find(Procesoelectoral.class, id);
            em.getTransaction().commit();
            em.close();    
            emf.close();
        }catch(Exception ex){

        }
        return proceso;
    }
    public  List<Procesoelectoral> BuscarProceso(Procesoelectoral proceso){
       List<Procesoelectoral> lista=null;
        try{
            String strSelect=
                    "SELECT p FROM Procesoelectoral p  WHERE upper(p.nombre) LIKE '%"+proceso.getNombre().toUpperCase()+"%'";
            if (proceso.getIdtipoprocesoelectoral().getIdtipoprocesoelectoral()!=0)
                strSelect= strSelect+" and  p.idtipoprocesoelectoral.idtipoprocesoelectoral = "+proceso.getIdtipoprocesoelectoral().getIdtipoprocesoelectoral().toString();
            
            if (proceso.getIdestadoprocesoelectoral().getIdestadoprocesoelectoral()>0)
               strSelect= strSelect+" and  p.idestadoprocesoelectoral.idestadoprocesoelectoral = '"+proceso.getIdestadoprocesoelectoral().getIdestadoprocesoelectoral()+"'";
            
            if (proceso.getFechainicio()!=null)
                strSelect+= " and p.fechainicio>=?1";
            if (proceso.getFechafin()!=null)
                strSelect+= " and p.fechainicio<=?2";
            
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("verinsPU");
            EntityManager em = emf.createEntityManager();
            em.getTransaction().begin();
            
            Query query= em.createQuery(strSelect);
            if (proceso.getFechainicio()!=null)
                query.setParameter(1, proceso.getFechainicio());
             if (proceso.getFechafin()!=null)
                query.setParameter(2, proceso.getFechafin()); 
             
            lista = query.getResultList();
            
            if (em.getTransaction().isActive())
                em.getTransaction().commit();
            em.close();    
            emf.close();
        }catch(Exception ex){
             System.out.println(ex.getCause());
        }
        return lista;
    }
}
